#ifndef HSET_H_
#define HSET_H_

#include "hash_funcs.h"

#ifdef __GLIBCXX__
# include <ext/hash_set>
#endif

namespace physicsworks {

/**
 * Wraps to the nonstandard STL hash_set.
 * 
 * Usage example: HSet<RigidBody*>::Type hs;

 */
template <class Value, class HashFcn = hash<Value>, class EqualKey = std::equal_to<Value>,
          class Alloc = std::allocator<Value> >
struct HSet {

#ifdef __GLIBCXX__
	typedef __gnu_cxx::hash_set<Value, HashFcn, EqualKey, Alloc> Type;
#endif

private:
	HSet<Value, HashFcn, EqualKey, Alloc>() {}
};

}

#endif /*HSET_H_*/
